package io.jee.medusa.orm.utils;

import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

public class ClassUtils {

	/**
	 * 获取指定类的所有方法
	 * 
	 * （包括继承自父类的方法）
	 *
	 * @category author: ynshun
	 * @since: 2014年11月10日
	 * @created: 下午4:21:46
	 * @param clz
	 * @return
	 */
	public static Map<String, Method> getAllMethods(Class<?> clz) {
		Map<String, Method> result = new HashMap<String, Method>();
		for (Method method : clz.getMethods()) {
			result.put(method.getName(), method);
		}
		return result;
	}

	/**
	 * 获取指定类的方法
	 * 
	 * （不包括继承的方法）
	 *
	 * @category author: ynshun
	 * @since: 2014年11月10日
	 * @created: 下午4:22:51
	 * @param clz
	 * @return
	 */
	public static Map<String, Method> getDeclaredMethods(Class<?> clz) {
		Map<String, Method> result = new HashMap<String, Method>();
		for (Method method : clz.getDeclaredMethods()) {
			result.put(method.getName(), method);
		}
		return result;
	}

	/**
	 * 获取指定类的所有Setter
	 * 
	 * （包括继承自父类的方法）
	 *
	 * @category author: ynshun
	 * @since: 2014年11月10日
	 * @created: 下午4:23:17
	 * @param clz
	 * @return
	 */
	public static Map<String, Method> getAllSetterMethods(Class<?> clz) {
		Map<String, Method> result = new HashMap<String, Method>();
		for (Method method : clz.getMethods()) {
			if (method.getName().startsWith("set")) {
				result.put(method.getName(), method);
			}
		}
		return result;
	}

	/**
	 * 获取指定类的所有Getter
	 * 
	 * （包括继承自父类的方法）
	 *
	 * @category author: ynshun
	 * @since: 2014年11月10日
	 * @created: 下午4:23:17
	 * @param clz
	 * @return
	 */
	public static Map<String, Method> getAllGetterMethods(Class<?> clz) {
		Map<String, Method> result = new HashMap<String, Method>();
		for (Method method : clz.getMethods()) {
			if (method.getName().startsWith("get")) {
				result.put(method.getName(), method);
			}
		}
		return result;
	}
}
